- Clean initialisation of new vcpu_info in map_vcpu_info() if the
vcpu was previously using the shared dummy structure.
- Don't allow a vcpu to run with teh shared dummy info structure, as
no good can come of it.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
new_info = (vcpu_info_t *)(mapping + offset);
- memcpy(new_info, v->vcpu_info, sizeof(*new_info));
+ if ( v->vcpu_info == &dummy_vcpu_info )
+ {
+ memset(new_info, 0, sizeof(*new_info));
+ __vcpu_info(v, new_info, evtchn_upcall_mask) = 1;
+ }
+ else
+ {
+ memcpy(new_info, v->vcpu_info, sizeof(*new_info));
+ }
v->vcpu_info = new_info;
v->arch.vcpu_info_mfn = mfn;
switch ( cmd )
{
case VCPUOP_initialise:
+ if ( v->vcpu_info == &dummy_vcpu_info )
+ return -EINVAL;
+
if ( (ctxt = xmalloc(struct vcpu_guest_context)) == NULL )
return -ENOMEM;